﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Net.Mail;
using System.Net;

public partial class Artigo_SubmeterArtigo : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["Usuario"] == null || Session["TipoUsuario"] == null)
            Response.Redirect("../Login.aspx");
        if (Session["Evento"] == null)
            Response.Redirect("../DefaultUS.aspx");
        if (Session["TipoUsuario"].ToString() != "Usuario")
            Response.Redirect("../Default.aspx");
    }
    [WebMethod]
    public static bool prazo()
    {
        Evento evento = Evento.findEventoById(new Guid(System.Web.HttpContext.Current.Session["Evento"].ToString()));
        DateTime now = DateTime.Now;
        if (now > evento.dataArtigoInicial && now < evento.dataArtigoFinal)
            return true;
        else
            return false;
    }
    [WebMethod]
    public static List<Trilha> carregarTrilha()
    {
        DataClassesDataContext dc = new DataClassesDataContext();
        return dc.Trilhas.Where(p => p.idEvento.Equals(new Guid(System.Web.HttpContext.Current.Session["Evento"].ToString()))).OrderBy(p => p.nome).ToList();
    }
    [WebMethod]
    public static Resultado<Usuario> getPessoas(int pagina, string nome)
    {
        int pag = pagina - 1;
        int i = pag * 4;
        DataClassesDataContext dc = new DataClassesDataContext();
        Resultado<Usuario> resultado = new Resultado<Usuario>();
        List<Usuario> listaUsuario = dc.Usuarios.Where(p => p.Pessoa.nome.Contains(nome)).ToList();
        resultado.Data = listaUsuario.Skip(i).Take(4).ToList();
        resultado.TotalCount = listaUsuario.Count;
        return resultado;
    }
    [WebMethod]
    public static Usuario getAutor(string id)
    {
        return Usuario.findById(new Guid(id));
    }
    [WebMethod(EnableSession=true)]
    public static Evento carregarEvento()
    {
        return Evento.findEventoById(new Guid(System.Web.HttpContext.Current.Session["Evento"].ToString()));
    }
    [WebMethod]
    public static bool convidarAutor(string nome, string instituicao, string curso, string email, string comentario, string idArtigo)
    {
        Artigo artigo = Artigo.getArtigoById(new Guid(idArtigo));
        bool retorno = false;
        Pessoa pessoa = new Pessoa();
        pessoa.nome = nome;
        pessoa.id = Guid.NewGuid();
        pessoa.instituicao = instituicao;
        pessoa.curso = curso;
        pessoa.dataCadastro = DateTime.Now;
        if (Pessoa.createPessoa(pessoa))
        {
            Usuario usuario = new Usuario();
            usuario.email = email;
            usuario.login = Usuario.createLogin(nome);
            usuario.senha = "1234";
            usuario.id = Guid.NewGuid();
            usuario.IdPessoa = pessoa.id;
            usuario.confirmado = false;
            usuario.idTipoUsuario = new Guid("70906a13-fec3-41ca-aefe-8df91c3a5088");
            if (Usuario.createUsuario(usuario))
            {
                EnviarEmail(usuario.email, usuario.id.ToString(), usuario.Pessoa.nome, "Convite para ser autor de artigo", artigo.id.ToString(), artigo.titulo, comentario);
                retorno = true;
            }
            else
                retorno = false;
        }
        return retorno;
    }
    public static void EnviarEmail(String destinatario, String idUsuario, String nome, String assunto, string idArtigo, string tituloDoArtigo, string comentario)
    {
        Usuario usuario = Usuario.findById(new Guid(idUsuario));
        SmtpClient cliente = new SmtpClient("smtp.gmail.com", 587);
        MailMessage email = new MailMessage();
        cliente.EnableSsl = true;
        cliente.Credentials = new NetworkCredential("sistemaeventosceulp@gmail.com", "sistemaeventos1234");
        email.From = new MailAddress("sistemaeventos@gmail.com", "Sistema Eventos - CEULP/ULBRA");
        email.To.Add(destinatario);
        email.Subject = assunto;
        email.IsBodyHtml = true;
        email.Priority = MailPriority.Normal;
        email.Sender = email.From;
        email.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
        email.BodyEncoding = System.Text.Encoding.Default;
        email.Body = "<div style='text-align: center'><div style='text-align: center'><table><tr><h2>Convite para se tornar autor de artigo<br/>Centro Universitário Luterano de Palmas - CEULP/ULBRA</h2><br/></tr><tr><h3>O artigo com o título &lsquo;<font>" + tituloDoArtigo + "</font>&rsquo;, detalhes <a href='http://localhost:13552/SistemaEventos/Artigo/VisualizarArtigo.aspx?i=" + idArtigo + "'>aqui</a></h3>";
        email.Body += "</tr><tr><h3>Seu login:"+usuario.login+"<h3></tr><tr><h3>Sua senha: 1234</h3></tr><tr><h3>Mensagem personalizada para você:</h3><br/> " + comentario + "</tr>";
        email.Body += "<tr><h3>Para confirmar o ingresso como autor, clique <a href='http://localhost:13552/SistemaEventos/Artigo/ConfirmarConviteAutor.aspx?codigo=" + idUsuario + "'>aqui</a></h3></tr></table></div></div>";
        cliente.Send(email);
    }
    [WebMethod]
    public static string existeUsuario(string email)
    {
        if (Usuario.exist(email))
        {
            string teste = Usuario.findByEmail(email).Pessoa.nome;
            return Usuario.findByEmail(email).Pessoa.nome;
        }
        else
            return "nao";
    }
    public static void teste()
    {
        //Server.MapPath(".\\");


    }
    [WebMethod]
    public static void vincularAutor(string email, string idArtigo, int ordem)
    {
        Usuario usuario = Usuario.findByEmail(email);
        AutoresArtigo aa = new AutoresArtigo();
        aa.confirmado = false;
        aa.id = Guid.NewGuid();
        aa.idArtigo = new Guid(idArtigo);
        aa.idPessoa = usuario.Pessoa.id;
        aa.ordem = ordem;
        AutoresArtigo.createAutoresArtigo(aa);
        //mandar email para confirmar email;
    }
    [WebMethod(EnableSession = true)]
    public static string cadastrarArtigo(string titulo, string resumo, string trilha)
    {
        Artigo artigo = new Artigo();
        artigo.aprovado = false;
        artigo.caminhoArquivo = "";
        artigo.dataCadastro = DateTime.Now;
        artigo.descricao = resumo;
        artigo.id = Guid.NewGuid();
        artigo.idEvento = new Guid(System.Web.HttpContext.Current.Session["Evento"].ToString());
        artigo.titulo = titulo;
        if (trilha != "")
            artigo.idTrilha = new Guid(trilha);
        Artigo.createArtigo(artigo);
        return artigo.id.ToString();
    }
}